package com.zara.store.web.struts;

import java.io.IOException;
import java.math.BigDecimal;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.zara.store.client.clientmodel.Basket;
import com.zara.store.client.clientmodel.BasketProduct;
import com.zara.store.common.InvoiceVO;

public class InvoiceAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {

		HttpSession session = request.getSession();
		Basket basket = (Basket) session.getAttribute(Basket.class.getName());
		
		if(basket == null) {
			return (mapping.findForward("failure"));			
		}
		
		InvoiceForm customForm = (InvoiceForm) form;
		InvoiceVO invoiceVO = new InvoiceActionHelper().createInvoiceVO(customForm);

		InvoiceVO createdInvoiceVO = basket.createInvoice(invoiceVO);
		customForm.setInvoiceId(createdInvoiceVO.getId()+"");
		
		session.removeAttribute(Basket.class.getName());
		session.removeAttribute(BasketProduct.class.getName());
		//request.setAttribute(Basket.class.getName(), basket);
		invoiceVO.setId(createdInvoiceVO.getId());

		session.setAttribute("invoice", invoiceVO);
		session.setAttribute("invoice-basket", basket);
		
		return (mapping.findForward("success"));
	}

	public class InvoiceActionHelper {

		public InvoiceVO createInvoiceVO(InvoiceForm customForm) {
			BigDecimal valueTaxIIVA = BigDecimal.ZERO;
			BigDecimal total = BigDecimal.ZERO;
			BigDecimal subTotal = BigDecimal.ZERO;
			if(customForm!=null) {
				try {
					String taxIVA = customForm.getTaxIVA();
					if(taxIVA != null) {
						Double.valueOf(taxIVA);
						valueTaxIIVA = new BigDecimal(taxIVA);
					}
				} catch(NumberFormatException e) { //validacion
				}
			}
			return new InvoiceVO(customForm.getInvoiceType(), total, subTotal, 
					valueTaxIIVA, customForm.getClientStatusIVA(), customForm.getClientName(), customForm.getClientCUIT(), customForm.getClientAddress());
		}

	}
	
}